{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "from torch import nn\n",
    "from torch.utils.data import TensorDataset, DataLoader\n",
    "import torch.nn.functional as F\n",
    "\n",
    "from sklearn.metrics import accuracy_score\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import metrics\n",
    "\n",
    "from alpaca.ue import MCDUE\n",
    "from alpaca.utils.datasets.builder import build_dataset\n",
    "from alpaca.utils.ue_metrics import ndcg, classification_metric\n",
    "from alpaca.ue.masks import BasicBernoulliMask\n",
    "import alpaca.nn as ann\n",
    "\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load dataset\n",
    "mnist = build_dataset('mnist', val_size=10000)\n",
    "x_train, y_train = mnist.dataset('train')\n",
    "x_val, y_val = mnist.dataset('val')\n",
    "x_shape = (-1, 1, 28, 28)\n",
    "\n",
    "train_ds = TensorDataset(torch.FloatTensor(x_train.reshape(x_shape)), torch.LongTensor(y_train))\n",
    "val_ds = TensorDataset(torch.FloatTensor(x_val.reshape(x_shape)), torch.LongTensor(y_val))\n",
    "train_loader = DataLoader(train_ds, batch_size=512)\n",
    "val_loader = DataLoader(val_ds, batch_size=512)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SimpleConv(nn.Module):\n",
    "    def __init__(self, num_classes=10, activation=None, dropout_rate=0.5, dropout_mask=None):\n",
    "        if activation is None:\n",
    "            self.activation = F.leaky_relu\n",
    "        else:\n",
    "            self.activation = activation\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(1, 16, 3)\n",
    "        self.conv2 = nn.Conv2d(16, 32, 3)\n",
    "        self.linear_size = 12*12*32\n",
    "        self.fc1 = nn.Linear(self.linear_size, 256)\n",
    "        self.dropout = ann.Dropout(dropout_rate=dropout_rate, dropout_mask=dropout_mask())\n",
    "        self.fc2 = nn.Linear(256, num_classes)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.activation(self.conv1(x))\n",
    "        x = self.activation(self.conv2(x))\n",
    "        x = F.max_pool2d(x, 2, 2)\n",
    "        x = x.view(-1, self.linear_size)\n",
    "        x = self.activation(self.fc1(x))\n",
    "        x = self.dropout(x)\n",
    "        x = self.fc2(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 118/118 [00:50<00:00,  2.34it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Train loss on last batch 0.1569192260503769\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# Train model\n",
    "model = SimpleConv(dropout_mask=BasicBernoulliMask)\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = torch.optim.Adam(model.parameters())\n",
    "\n",
    "for x_batch, y_batch in tqdm(train_loader): # Train for one epoch\n",
    "    prediction = model(x_batch)\n",
    "    optimizer.zero_grad()\n",
    "    loss = criterion(prediction, y_batch)\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "print('\\nTrain loss on last batch', loss.item())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([96, 1, 28, 28])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_batch.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.98046875\n"
     ]
    }
   ],
   "source": [
    "model.eval()\n",
    "# Check accuracy\n",
    "x_batch, y_batch = next(iter(val_loader))\n",
    "class_preds = F.softmax(model(x_batch), dim=-1).detach().numpy()\n",
    "predictions = np.argmax(class_preds, axis=-1)\n",
    "print('Accuracy:', accuracy_score(predictions, y_batch))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Estimate uncertainty"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Uncertainty estimation with MCDUE_classification approach: 100%|██████████| 25/25 [00:04<00:00,  5.86it/s]\n"
     ]
    }
   ],
   "source": [
    "# Calculate uncertainty estimation\n",
    "estimator = MCDUE(model, num_classes=10, acquisition=\"bald\")\n",
    "predictions, estimations = estimator(x_batch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "score = classification_metric(estimations, np.equal(predictions.argmax(axis=-1), y_batch))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Accuracy')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(*score)\n",
    "plt.xlabel(\"Fraction\")\n",
    "plt.ylabel(\"Accuracy\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random uncertainty"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "estimations_random = torch.randn_like(estimations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "score = classification_metric(estimations_random, np.equal(predictions.argmax(axis=-1), y_batch))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Accuracy')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(*score)\n",
    "plt.xlabel(\"Fraction\")\n",
    "plt.ylabel(\"Accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}